package com.zhuoyue.biz.core.api.dao;

import java.util.List;
import java.util.Map;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;


import com.zhuoyue.biz.core.api.domain.DeviceAndGatewayDO;
import com.zhuoyue.biz.core.api.domain.DeviceDO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * @author wjming
 * @ClassName: DeviceDao
 * @Description: zigbee设备信息底层数据
 * @Date 2021-07-08 13:36
 */
public interface DeviceDao extends BaseMapper<DeviceDO> {


    /**
     * 修改设备
     *
     * @param device
     * @return
     */
    int updateDeviceByGatewayId(DeviceDO device);


    /**
     * 根据主键查询设备
     *
     * @param deviceId
     * @return
     */
    DeviceDO selectDeviceById(String deviceId);


    /**
     * 获取设备状态
     *
     * @param deviceId
     * @return
     * @throws Exception
     */
    List<Map<String, String>> selectDeviceActionsByDeviceId(@Param("deviceId") String deviceId);


    /**
     * 根据设备ID查询设备以及网关mac
     *
     * @param deviceId
     * @return
     */
    DeviceDO selectAllDeviceById(@Param("deviceId") String deviceId);


    /**
     * 查询设备id
     *
     * @param zigbeeMac
     * @return
     */
    List<DeviceDO> selectDeviceIdByDeviceMac(@Param("zigbeeMac") String zigbeeMac);


    /**
     * 修改action的值
     *
     * @param deviceId
     * @param time
     * @return
     */
    int updateDeviceActionNightLightTime(@Param("deviceId") String deviceId, @Param("time") String time);

    /***
     * 插入action的值
     * @param deviceId
     * @param time
     * @return
     */
    int insertDeviceActionNightLightTime(@Param("deviceId") String deviceId, @Param("time") String time);

    /**
     * 修改action的值
     *
     * @param deviceId
     * @param time
     * @return
     */
    int updateDeviceActionMotorTimeParameter(@Param("deviceId") String deviceId, @Param("time") String time);


    /***
     * 插入action的值
     * @param deviceId
     * @param time
     * @return
     */
    int insertDeviceActionMotorTimeParameter(@Param("deviceId") String deviceId, @Param("time") String time);

    /**
     * 修改设备Action信息
     *
     * @param deviceId
     * @param actionKey
     * @param actionValue
     * @return
     */
    int updateDeviceActionByDeviceId0Faa0C02(@Param("deviceId") String deviceId, @Param("actionKey") String actionKey, @Param("actionValue") String actionValue);


    /**
     * 获取设备列表通过网关信息
     *
     * @param eq
     * @return
     */
    List<DeviceDO> selectListByQuery(@Param(Constants.WRAPPER) LambdaQueryWrapper<DeviceDO> eq);

    /**
     * 查询设备信息，包含网关MAC
     *
     * @param deviceMac
     * @return
     */
    DeviceDO selectByMac(String deviceMac);

    /**
     * 查询用户信息通过网关amc地址
     *
     * @param deviceId
     * @return
     */
    DeviceAndGatewayDO selectUseCmdByMac(String deviceId);

    /**
     * 查询设备和网关MAC地址
     *
     * @param deviceId
     * @return
     */
    DeviceDO selectDeviceAndGatewayMac(String deviceId);

    /**
     * 一键全关底层设备信息查询
     *
     * @param gatewayId
     * @return
     */
    List<DeviceDO> selectOpenDeviceByGatewayId(@Param("gatewayId") String gatewayId);


    /**
     * 查询红外控制器ID
     *
     * @param gatewayId
     * @return
     */
    @Select("SELECT id FROM tbl_device WHERE CONCAT(od_index,device_type,product_type) IN('0fe60202','0fe60207','0fad0207') AND gateway_id=#{gatewayId}")
    List<String> selectIdByType(@Param("gatewayId") String gatewayId);

    /**
     * 查询设备ID通过设备MAC地址
     *
     * @param deviceMac
     * @return
     */
    @Select("select id from tbl_device where zigbee_mac = #{deviceMac}")
    String selectDeviceIdByMac(@Param("deviceMac") String deviceMac);

    /**
     * 查询zigbee设备的名称和房间名称
     *
     * @param zigbeeIdList
     * @return
     */
    List<DeviceDO> selectZigbeeNameAndRoomNameByIds(@Param("zigbeeIdList") List<String> zigbeeIdList);

    /**
     * 查询zigbee设备的名称和房间名称
     *
     * @param id
     * @return
     */
    DeviceDO selectZigbeeNameAndRoomNameById(@Param("id") String id);

    /**
     * 通过产品Id获取产品功能信息
     *
     * @param prodId
     * @return
     */
    String selectDeviceFunction(String prodId);
}
